'use strict'; 

const DATASET = Symbol['Dataset']; 
const APPDATA = Symbol['AppData'];

// 数据集
class Dataset {
    constructor (){
        this[DATASET] = {};
    }

    // 获取
    get (...argv){
        if(argv.length === 1){
            return this[DATASET][argv[0]];
        }
        return argv.map(key=>{
            return this[DATASET][key];
        });
    }

    // 存入
    set (key, value){
        if (arguments.length < 2) {
            return ;
        }
        
        this[DATASET][key] = value;
    }
    
    // 删除
    remove (key){
        if (key && this.has(key)) {
            delete this[DATASET][key];
        }
    }

    // 清空
    clear (){
        for (const key in this._dataset) {
            try {
                delete this[DATASET][key];
            } catch (error) { 
                this[DATASET][key] = undefined;
            }
        } 
    } 

    // 复位
    reset (){ 
        this[DATASET] = {};
    }

    // 包含
    has (key){
        return Reflect.has(this[DATASET], key);
    }
}

/** 
 * 
 * 用户数据管理 
 **/ 
export class State {

    constructor () {
        this[APPDATA] = new Dataset();
    }

    /** 
     * 订阅
     **/ 
    subscribe () {

    }

    /** 
     * 公布 
     **/ 
    publish(){

    }


}
